MinimalGL: カメラコントロール
コード
カメラの状態は、以下の tanFovY と cameraInWorld で取得できる
code:glsl
layout(location = 6) uniform float tanFovY;
layout(location = 7) uniform mat4 cameraInWorld;
レイキャストで使う
中心が0・縦横比が1のスクリーン座標 p を用いて、以下のように書ける code:glsl
vec3 ro = cameraInWorld3.xyz; vec3 rd = mat3(cameraInWorld) * normalize(vec3(p * tanFovY, -1));
⚠️.icon build_2025_12_23現在: tanFovYについて、本来は$ \tan(FOV)ではなく$ \tan(FOV/2)を使いたい箇所である点に注意。一旦、UI上の "fovY" に半分の値を指定する形で使おう
カメラの変化を検知する
カメラ情報の変化を検知する手順
極めて雑にやるなら、
tanFovY と cameraInWorld を用いてハッシュ値を計算し、 texelFetch を行い、現フレームのハッシュ値と1フレーム前のハッシュ値の比較を行う
ハッシュ値の計算にはpcg3dとか使うと良いですよ code:glsl
vec3 cameraStateHash = hash3f(
+ tanFovY
);
if (floor(gl_FragCoord.xy) == vec2(0)) {
outColor = vec4(cameraStateHash, 1.0);
return;
}
bool isCameraChanged = length(cameraStateHash - texelFetch(backBuffer, ivec2(0), 0).xyz) > 0.01;
操作方法
左クリックでドラッグで上下左右に移動
右クリックでドラッグで回転
ホイールで前後に移動